package com.shareyi.baseproject.kernel.common.event;


import com.shareyi.baseproject.kernel.common.enums.EnumCode;

/**
 * 事件管理器切面
 *
 * @author qiulong
 * @date 2018.12.12
 */
public class EventManagerFacade {

    /**
     * 事件管理器
     */
    private static final EventManager EVENT_MANAGER = new EventBusManager();

    /**
     * 发布一个事件(同步处理)
     *
     * @param topic 事件主题
     * @param event 事件
     */
    public static void pubEvent(EnumCode<String> topic, Event event) {
        EVENT_MANAGER.pub(topic.getCode(), event);
    }

    /**
     * 订阅一个事件(同步处理)
     *
     * @param topic      事件主题
     * @param subscriber 事件订阅者
     */
    public static void subEvent(com.shareyi.baseproject.kernel.common.enums.EnumCode<String> topic, SubscribeAware subscriber) {
        EVENT_MANAGER.sub(topic.getCode(), subscriber);
    }

    /**
     * 订阅一个事件
     *
     * @param topic            事件主题
     * @param subscriber       事件订阅者
     * @param exceptionHandler 异常处理
     */
    public static void subEvent(EnumCode<String> topic, SubscribeAware subscriber, EventExceptionHandler exceptionHandler) {
        subEvent(topic.getCode(), subscriber, exceptionHandler);
    }

    /**
     * 取消订阅
     *
     * @param topic      事件主题
     * @param subscriber 事件订阅者
     */
    public static void unsubEvent(EnumCode<String> topic, SubscribeAware subscriber) {
        EVENT_MANAGER.unsub(topic.getCode(), subscriber);
    }


    /**
     * 订阅一个事件
     *
     * @param topic            事件主题
     * @param subscriber       事件订阅者
     * @param exceptionHandler 异常处理
     */
    public static void subEvent(String topic, SubscribeAware subscriber, EventExceptionHandler exceptionHandler) {
        EVENT_MANAGER.sub(topic, subscriber, exceptionHandler);
    }

    /**
     * 取消订阅
     *
     * @param topic      事件主题
     * @param subscriber 事件订阅者
     */
    public static void unsubEvent(String topic, SubscribeAware subscriber) {
        EVENT_MANAGER.unsub(topic, subscriber);
    }
}
